package com.example.laixunlong.control;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.example.laixunlong.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Spinner_xiala extends AppCompatActivity {

    /*设置图标集合*/
    public static int[] icon=new int[]{
            R.drawable.tx_1,
            R.drawable.tx_2,
            R.drawable.tx_3,
            R.drawable.tx_4,
            R.drawable.tx_5,
            R.drawable.tx_6,
            R.drawable.tx_1,
            R.drawable.tx_2,
            R.drawable.tx_3,
            R.drawable.tx_4,
            R.drawable.tx_5,
            R.drawable.tx_6,
    };
    /*设置每一条目的文本内容*/
    public static String[] table=new String[]{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
    /*设置介绍集合*/
    public static String[] value=new String[]{
            "子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍子的介绍",
            "丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍丑的介绍",
            "寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍寅的介绍",
            "卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍卯的介绍",
            "辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍辰的介绍",
            "巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍巳的介绍",
            "午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍午的介绍",
            "未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍未的介绍",
            "申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍申的介绍",
            "酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍酉的介绍",
            "戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍戌的介绍",
            "亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍亥的介绍"
    };
    Spinner spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spinner_xiala);
        spinner=findViewById(R.id.spindner_xiala_1);
        /*创建适配器,把写好的xml引入第二个参数,
               注意:虽然xml文件可以是任何布局文件,但只有宽高符合spinner设置值的部分才能显示
            适配器1:ArrayAdapter<String>   仅支持文本条目,但参数简单,第二参数只要是Textview主标签就能生成
                    ArrayAdapter<String> star_table=new ArrayAdapter<>(this,R.layout.z_tiaomu,table);
                    spinner.setAdapter(star_table);//往条目布局中,添加适配器

            适配器2:SimpleAdapter  map映射关系,可给条目加上图标,但每一个标签可修改的部分是固定的,比如text只能修改文本,image只能修改src
                    SimpleAdapter simpleAdapter;
                    List<Map<String,Object>> list=new ArrayList<>();
                    for(int i=0;i<icon.length;i++)//创建每一个条目的映射Map对象
                    {
                        Map<String ,Object> j =new HashMap<>();
                        j.put("icon",icon[i]);
                        j.put("table",table[i]);
                        list.add(j);
                    }
                    simpleAdapter=new SimpleAdapter(
                            this,
                            list,
                            R.layout.z_tiaomu,
                            new String[]{"icon","table"},
                            new int[]{R.id.spinner_item_img_1,R.id.spindner_xiala_1});
                    spinner.setAdapter(simpleAdapter);//往条目布局中,添加适配器

            适配器3:通过继承BaseAdapter,创建自定义条目内容,详细的设置在下文内部类中,四个抽象方法的重写
                    custom_tiaomu custom;
                    List<structure> l=new ArrayList<>();
                    for(int i=0;i<table.length;i++)
                    {
                        structure s=new structure(table[i],value[i],icon[i]);
                        l.add(s);
                    }
                    custom=new custom_tiaomu(this,l);
                    spinner.setAdapter(custom);//往条目布局中,添加适配器

        */
        custom_tiaomu custom;
        List<structure> l=new ArrayList<>();
        for(int i=0;i<table.length;i++)
        {
            structure s=new structure(table[i],value[i],icon[i]);
            l.add(s);
        }
        custom=new custom_tiaomu(this,l);
        Log.e("数据大小:",l.size()+"");
        spinner.setAdapter(custom);//往条目布局中,添加适配器


        /*设置默认选中第一个元素*/
        spinner.setSelection(0);
        /*设置下拉选中监听*/
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override/*选中某个触发*/
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                /*使用参数position作为下标进行内容获取*/
                String a=table[position];
                Toast.makeText(Spinner_xiala.this,"你选中:"+a,Toast.LENGTH_SHORT).show();
            }
            @Override/*没有选择时触发*/
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }

}
/*自定义的条目结构*/
class custom_tiaomu extends BaseAdapter {
    private Context actvt;//触发窗体,上下文
    private int index=0;
    private List<structure> item;//数据集

    public custom_tiaomu(Context actvt, List<structure> item) {
        this.actvt = actvt;
        this.item = item;
    }

    @Override/*当前适配器元素数*/
    public int getCount() {
        return item.size();
    }
    @Override/*获取其中一个条目*/
    public Object getItem(int position) {
        return item.get(position);
    }
    @Override/*获取元素下标*/
    public long getItemId(int position) {
        return position;
    }
    @Override/*条目的数据初始化,安卓自带的回收机制,超出屏幕的view,会再次被传入*/
    public View getView(int position, View convertView, ViewGroup parent)
    {
        view_dai dai;index=position;//创建中转数据
        if(convertView==null)//如果该对象为空,说明是新数据,需要从头创建
        {
            convertView=LayoutInflater.from(actvt).inflate(R.layout.z_tiaomu,null);//获取布局
            dai=new view_dai();//写入中转变量
            dai.img=convertView.findViewById(R.id.spinner_item_img_1);
            dai.txt=convertView.findViewById(R.id.spinner_item_text_1);
            dai.str=convertView.findViewById(R.id.spinner_item_text_2);
            dai.but=convertView.findViewById(R.id.spinner_item_button_1);
            /*将数据放入口袋,口袋中的数据会随下一次被引入时,由convertView携带进来*/
            convertView.setTag(dai);
        }
        else//如果该对象不为空,说明式回收数据
        {
            /*取出口袋数据,放入中转数据*/
            dai=(view_dai) convertView.getTag();
        }
        structure s=item.get(position);
        dai.img.setImageResource(s.icon);
        dai.txt.setText(s.title);
        dai.str.setText(s.introduce);
        dai.but.setOnClickListener(new View.OnClickListener() {//设置条目中的按钮点击事件
            @Override
            public void onClick(View v) {
                /*设置对话框弹出事件*/
                AlertDialog.Builder builder = new AlertDialog.Builder(actvt);
                View view=((Activity)actvt).getLayoutInflater().inflate(R.layout.dialog_tanchuang,null);
                builder.setIcon(R.mipmap.ic_launcher)
                        .setTitle(item.get(index).title)
                        .setMessage(item.get(index).introduce)
                        .setView(view)
                        /*以下三个按钮的样式设定是根据系统版本内置的,开发人员无法对其进行编辑*/
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override/*确认按钮*/
                            public void onClick(DialogInterface dialogInterface, int i) {
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override/*取消按钮*/
                            public void onClick(DialogInterface dialogInterface, int i) {
                            }
                        })
                        .setNeutralButton("中间", new DialogInterface.OnClickListener() {
                            @Override/*对话按钮*/
                            public void onClick(DialogInterface dialogInterface, int i) {
                            }
                        })
                        .create()
                        .show();
            }
        });
        return convertView;
    }
    /*临时数据结构,口袋数据*/
    public final class view_dai{
        public ImageView img;
        public TextView txt;
        public TextView str;
        public Button but;
    }

}
/*使用的数据结构,其实可以定义在外部*/
class structure{
    public String introduce;
    public String title;
    public int icon;
    public structure( String title,String introduce, int icon) {
        this.introduce = introduce;
        this.title = title;
        this.icon = icon;
    }
}